home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / taropyon / silib / inc / vm.h < prev   
Encoding:
C/C++ Source or Header  |  1994-11-16  |  2.5 KB  |  101 lines

  1. /*************************************************************************
  2. *    疑似仮想記憶ライブラリ
  3. *************************************************************************/
  4.  
  5. #ifndef    _VM_H
  6. #define    _VM_H
  7.  
  8. #include    <stdio.h>
  9. #include    <stdlib.h>
  10. #include    <time.h>
  11.  
  12. #ifndef    NORMAL
  13. #    define    NORMAL    (0)
  14. #endif
  15. #ifndef    ERR
  16. #    define    ERR        (-1)
  17. #endif
  18. #ifndef    TRUE
  19. #    define    TRUE    (1)
  20. #endif
  21. #ifndef    FALSE
  22. #    define    FALSE    (0)
  23. #endif
  24.  
  25. typedef struct _vmdat_t
  26. {
  27.     struct _vmdat_t        *next, *prev;
  28.  
  29.     size_t            siz;
  30.     void            *ptr;        /* NULL以外ならメモリ中    */
  31.     long            fpos;        /* ファイル位置            */
  32.     unsigned short    lock;        /* ロックカウント        */
  33.     char            flgChg;        /* 内容に変更があったか    */
  34.     char            dmy_0;
  35. } VMDAT_T;
  36.  
  37. typedef VMDAT_T *    VMHDL_T;
  38.  
  39. typedef struct _vmctrl_t
  40. {
  41.     struct _vmctrl_t    *next, *prev;
  42.  
  43.     unsigned int    att;            /* 属性                                */
  44.     unsigned int    stt;            /* ステータス                        */
  45.  
  46.     time_t            time;            /* アクセス時間チェック用            */
  47.     size_t            sizMax;            /* 実メモリ中に確保できる大きさ        */
  48.     size_t            sizUse;            /* 確保されているサイズ                */
  49.     size_t            sizMem;            /* メモリ中に確保されているサイズ    */
  50.     size_t            sizFil;            /* ファイル中に確保されているサイズ    */
  51.  
  52.     VMDAT_T            *datTop;
  53.     VMDAT_T            *datLast;
  54.     unsigned int    cnt;            /* アクセスカウンタ                    */
  55.  
  56.     size_t            sizExt;            /* ファイルサイズを拡張単位            */
  57.     long            fsizCrt;        /* 現在のファイルサイズ                */
  58.     long            fposTop;
  59.     long            fposLast;
  60.  
  61.     FILE            *fp;
  62.     int                flgFile;
  63.     char            path[256];
  64. } VM_T;
  65.  
  66. #define    VMSTT_SWAP_IGNORE    (0x0000_0001)    /* スワップアウト禁止    */
  67. #define    VMACT_OFF            (0)
  68. #define    VMACT_ON            (1)
  69.  
  70. extern VM_T           *VmTop;
  71. extern unsigned int    VmCd;
  72. extern int            VmDrv;    /* スワップアウト・ドライブ    */
  73.  
  74. extern int            VM_init(void);
  75. extern void            VM_term(void);
  76. extern void            VM_sysPause(void);
  77. extern VM_T           *VM_open(size_t sizMax);
  78. extern void            VM_close(VM_T *vm);
  79. extern int            VM_action( VM_T *vm, int act );
  80. extern VMHDL_T        VM_hdlAlloc( VM_T *vm, size_t siz);
  81. extern void            VM_hdlFree( VM_T *vm, VMHDL_T hdl);
  82. extern void           *VM_inc( VM_T *vm, VMHDL_T hdl);
  83. extern void            VM_dec( VM_T *vm, VMHDL_T hdl);
  84. extern int            VM_swapOut( VM_T *vm, VMHDL_T hdl );
  85. extern int            VM_modify( VM_T *vm, VMHDL_T hdl);
  86. extern int            VM_access( VM_T *vm, VMHDL_T hdl );
  87.  
  88. #define    VM_INC(_vm,_hdl)    ((_hdl)->ptr ? ((++(_hdl)->lock), (_hdl)->ptr) : VM_inc((_vm),(_hdl)))
  89. #define    VM_DEC(_vm,_hdl)    (--((_hdl)->lock))
  90.  
  91. /* 高速版VM_modify() */
  92. #define    VM_MODIFY(_vm,_hdl)    {    \
  93.     if ( (_hdl)->ptr )            \
  94.     {    (_hdl)->flgChg = TRUE;    \
  95.     } else                        \
  96.     {    (_hdl)->flgChg = FALSE;    \
  97.     }                            \
  98. }
  99.  
  100. #endif
  101.